1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.cache;
18
19 import com.google.caliper.BeforeExperiment;
20 import com.google.caliper.Benchmark;
21 import com.google.caliper.Param;
22 import com.google.common.cache.LocalCache.ReferenceEntry;
23 import com.google.common.cache.LocalCache.Segment;
24
25
26
27
28
29
30 public class ChainBenchmark {
31
32 @Param({"1", "2", "3", "4", "5", "6"}) int length;
33
34 private Segment<Object, Object> segment;
35 private ReferenceEntry<Object, Object> head;
36 private ReferenceEntry<Object, Object> chain;
37
38 @BeforeExperiment
39 void setUp() {
40 LocalCache<Object, Object> cache = new LocalCache<Object, Object>(
41 CacheBuilder.newBuilder()
42 .concurrencyLevel(1), null);
43 segment = cache.segments[0];
44 chain = null;
45 for (int i = 0; i < length; i++) {
46 Object key = new Object();
47 chain = segment.newEntry(key, cache.hash(key), chain);
48 if (i == 0) {
49 head = chain;
50 }
51 }
52 }
53
54 @Benchmark int time(int reps) {
55 int dummy = 0;
56 for (int i = 0; i < reps; i++) {
57 segment.removeEntryFromChain(chain, head);
58 dummy += segment.count;
59 }
60 return dummy;
61 }
62 }